title: typescript文档1-Get Started
date: 2023.2.19
tags:
https://www.typescriptlang.org/zh/docs/handbook/typescript-from-scratch.html
2023.2.19 星期日
JavaScript 的类型化超集
不过,TypeScript 与 JavaScript 是什么关系呢?
语法
TypeScript 是 JavaScript 的 超集 :因此 JS 语法是合法的 TS。<!– 语法是指我们编写文本以组成程序的方式。例如,这段代码有一个 语法 错误,因为它缺少一个 ):
类型
但是,TypeScript 是一个 类型化 的超集,意味着它添加了针对如何使用不同类型的值的规则。
运行时行为
TypeScript 保留了 JavaScript 的 运行时行为 。原则上,TypeScript 绝不 改变 JavaScript 代码的运行时行为。
擦除类型
粗略地说,一旦 TypeScript 的编译器完成了检查代码的工作,它就会 擦除 类型以生成最终的“已编译”代码
JavaScript 中已经有一些基本类型可用:boolean、 bigint、 null、number、 string、 symbol 和 undefined,它们都可以在接口中使用。TypeScript 将此列表扩展为更多的内容,例如 any (允许任何类型)、unknown (确保使用此类型的人声明类型是什么)、 never (这种类型不可能发生)和 void (返回 undefined 或没有返回值的函数)。
构建类型有两种语法: 接口和类型。 你应该更喜欢 interface。当需要特定功能时使用 type 。
ts
type StringArray = Array<string>;
type NumberArray = Array<number>;
type ObjectWithNameArray = Array<{ name: string }>;
// # 声明自己使用泛型的类型
interface Backpack<Type> {
add: (obj: Type) => void;
get: () => Type;
}
// 这一行是一个简写,可以告诉 TypeScript 有一个常量,叫做`backpack`,并且不用担心它是从哪
// 里来的。
declare const backpack: Backpack<string>;
// 对象是一个字符串,因为我们在上面声明了它作为 Backpack 的变量部分。
const object = backpack.get();
// 因为 backpack 变量是一个字符串,不能将数字传递给 add 函数。
backpack.add(23);
// Argument of type 'number' is not assignable to parameter of type 'string'.
在结构化的类型系统当中,如果两个对象具有相同的结构,则认为它们是相同类型的。